import axios from 'axios'
/* 导入toast */
import { Toast } from 'vant'

/* 导入token方法 */
import { removeLocal, getLocal } from '@/utils/local.js'
/* 导入路由 */
import router from '@/router'
import store from '@/store'

/* 创建一个副本 */
const _fetch = axios.create({
  baseURL: process.env.VUE_APP_URL
})

//请求拦截
_fetch.interceptors.request.use(
  config => {
    // authorization是请求参数,传个token
    if (config.needToken) {
      config.headers.authorization = `Bearer ` + getLocal()
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)
//
//响应拦截
_fetch.interceptors.response.use(
  res => {
    if (res.data.code === 200) {
      return res
      /* 获取noError的值
          true:不处理它的错误,只是中止后面.then执行
          false:和以前一样*/
    } else if (res.config.noError) {
      return Promise.reject('error')
      // else if(知道某个请求不需要错误处理){
      //   return Promise.reject('error')
    } else if (res.data.code === 401 || res.data.code === 403) {
      /* token错语 提示一下 删除token 跳转到登录页 阻止.then执行  return Promise.reject(错误信息) */
      Toast.fail(res.data.message)
      removeLocal()
      router.push('/login?redirect=' + window.location.href.split('#')[1])

      /* 登录状态是true还是false */
      // token出现问题时,回到登录页时修改vuex登录状态 ,需要导入store
      store.commit('setLoginStatus', false)
      return Promise.reject(res.data.message)
    } else {
      //如果不是200,其他处理 提示错误信息 阻止.then执行  return Promise.reject(错误信息)
      Toast.fail(res.data.message)
      return Promise.reject(res.data.message)
    }
  },
  error => {
    return Promise.reject(error)
  }
)

export default _fetch
